// 发布订阅模式 又叫观察者模式
// 思想：定义了对象间一对多的关系，当一个对象的状态发生改变的时候，所有依赖于它的对象都将得到通知
function Observe() {
  this.cache = {} // 订阅池
}
Observe.prototype.listen = function (key, fn) {
  if (!this.cache[key]) {
    this.cache[key] = []
  }
  this.cache[key].push(fn)
}

Observe.prototype.trigger = function () {
  const key = Array.prototype.shift.call(arguments) // 截取第一个参数做key
  const fns = this.cache[key]
  if (!fns || !fns.length) return
  for (let i = 0, fn; fn = fns[i++];) {
    fn.apply(this, arguments)
  }
}

const observe = new Observe()

observe.listen('test', function(count){
  console.log('我是test事件触发的：', count)
})


setTimeout(() => {
  observe.trigger('test', 12333)
}, 3000);